package BeenChina.PM.Action;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap; 
import java.util.List;
import java.util.Map; 

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts2.ServletActionContext;

import net.sf.json.JSONArray;
import BeenChina.PM.Model.ModelErrorChildImage; 
import BeenChina.PM.Model.ModelUser;
import BeenChina.PM.Service.ServiceFactory;
import BeenChina.PM.Util.EncodeDownLoadFileName;
import BeenChina.PM.Util.ExportInfo;
import BeenChina.PM.Util.ExportToExcel;
import BeenChina.PM.Util.StringUtil;
import BeenChina.PM.Util.xmlSerializer;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class ErrorChildImageQueryAction extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private String dateTo,dateFrom;	
	private Map<String, Object> tableData;
	private InputStream excelStream;
	private String fileName;
	private static String EXPORTID = "521";
	private static String SAVEIMAGE = "522";
	private boolean exportExcel,saveImage;
	
	private static final Log log = LogFactory.getLog(ErrorChildImageQueryAction.class);
 

	public boolean isExportExcel() {
		return exportExcel;
	}

	public boolean isSaveImage() {
		return saveImage;
	}

	public InputStream getExcelStream() {
		return excelStream;
	}

	public void setExcelStream(InputStream excelStream) {
		this.excelStream = excelStream;
	}

	public String getFileName() throws UnsupportedEncodingException {
		ServletActionContext.getResponse().setHeader("charset", "UTF-8");
		fileName = EncodeDownLoadFileName.encode(
				ServletActionContext.getRequest(), fileName);
		return fileName;
	}

	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
  

	public Map<String, Object> getTableData() {
		return tableData;
	}

	public void setDateTo(String dateTo) {
		this.dateTo = dateTo;
	}

	public void setDateFrom(String dateFrom) {
		this.dateFrom = dateFrom;
	}
	
	@Override
	public String execute() {
		ModelUser user = (ModelUser) ActionContext.getContext().getSession()
				.get("user");
		if (user != null)
		{	
			exportExcel = user.concatPermission(EXPORTID);
			saveImage = user.concatPermission(SAVEIMAGE);
		}
		
		return "load";
	}

	public List<ModelErrorChildImage> getErrorChildImage() throws Exception {
		try {
			if (  StringUtil.isDate(dateFrom, "yyyy-MM-dd")
					&& StringUtil.isDate(dateTo, "yyyy-MM-dd")) {
				return ServiceFactory.getInstance()
						.getQualityInfoService()
						.selectErrorChildImageQuery(dateFrom, dateTo);
			} else {
				return null;
			}
		} catch (Exception exp) {
			throw exp;
		}
	}
 

	public String refreshData() throws Exception {

		List<ModelErrorChildImage> errorChildImage = getErrorChildImage(); 

		Map<String, Object> map = new HashMap<String, Object>();
		map.put("ErrorChildImageTable", getErrorChildImageTable(errorChildImage));
	 

	 
		tableData = map;
		return ActionSupport.SUCCESS;
	}

   
 
	private JSONArray getErrorChildImageTable(List<ModelErrorChildImage> list) {

		JSONArray mapTable = new JSONArray();
		if (list == null || list.size() == 0) {
			return mapTable;
		}

		JSONArray jsonTittle = new JSONArray();
		jsonTittle.add("ID");
		jsonTittle.add("月別");
		jsonTittle.add("案件");
		jsonTittle.add("カテゴリ");
		jsonTittle.add("ミス種類");
		jsonTittle.add("指摘先");		
		jsonTittle.add("受番	" );
		jsonTittle.add("子画像ID");
		jsonTittle.add("画像");	
		jsonTittle.add("エントリ結果");
		jsonTittle.add("付箋	");
		jsonTittle.add("正解");
		jsonTittle.add("付箋");
		jsonTittle.add("A工程");
		jsonTittle.add("付箋	");
		jsonTittle.add("OPID");
		jsonTittle.add("B工程");
		jsonTittle.add("付箋");
		jsonTittle.add("OPID");
		jsonTittle.add("C工程");
		jsonTittle.add("付箋	");
		jsonTittle.add("OPID");
		jsonTittle.add("D工程");
		jsonTittle.add("付箋");
		jsonTittle.add("OPID");
		jsonTittle.add("E工程"); 
		jsonTittle.add("OPID");


		 
		mapTable.add(jsonTittle); 

		 
		
		for (int j = 0; j < list.size(); j++) {
			
			ModelErrorChildImage model = list.get(j);
			JSONArray json = new JSONArray();
			
			json.add(model.getId());
			json.add( model.getOrderID().substring(11,19));
			json.add(model.getOrderID().substring(0,3));
			json.add(model.getCategoryName());
			json.add(model.getMissType());
			json.add(model.getVerfityItemName());
			json.add(model.getOrderID());
			json.add(model.getImageID());
			//json.add(model.getThumbnail());
			json.add( model.getImage()  ); 
			json.add(model.getFinalResult() );
			json.add(model.getFinalEntryCommentID());
			json.add(model.getCorrectEntryResult());
			
			json.add(model.getCorrectCommentID());			
			json.add(model.getaResult());
			json.add(model.getaEntryCommentID());
			json.add(model.getaOpID());
			
			json.add(model.getbResult());
			json.add(model.getbEntryCommentID());
			json.add(model.getbOpID());
			
			json.add(model.getcResult());
			json.add(model.getcEntryCommentID());
			json.add(model.getcOpID());
			
			json.add(model.getdResult());
			json.add(model.getdEntryCommentID());
			json.add(model.getdOpID());
			
			json.add(model.geteResult());
			json.add(model.geteOpID());
			
			mapTable.add(json);	 
		}

		return mapTable;
	}

	private JSONArray getErrorChildImageTableB(List<ModelErrorChildImage> list) {

		JSONArray mapTable = new JSONArray();
		if (list == null || list.size() == 0) {
			return mapTable;
		}

		JSONArray jsonTittle = new JSONArray();
		jsonTittle.add("ID");
		jsonTittle.add("月別");
		jsonTittle.add("案件");
		jsonTittle.add("カテゴリ");
		jsonTittle.add("ミス種類");
		jsonTittle.add("指摘先");		
		jsonTittle.add("受番	" );
		jsonTittle.add("子画像ID");
	/*	jsonTittle.add("画像");	*/
		jsonTittle.add("エントリ結果");
		jsonTittle.add("付箋	");
		jsonTittle.add("正解");
		jsonTittle.add("付箋");
		jsonTittle.add("A工程");
		jsonTittle.add("付箋	");
		jsonTittle.add("OPID");
		jsonTittle.add("B工程");
		jsonTittle.add("付箋");
		jsonTittle.add("OPID");
		jsonTittle.add("C工程");
		jsonTittle.add("付箋	");
		jsonTittle.add("OPID");
		jsonTittle.add("D工程");
		jsonTittle.add("付箋");
		jsonTittle.add("OPID");
		jsonTittle.add("E工程"); 
		jsonTittle.add("OPID");


		 
		mapTable.add(jsonTittle); 

		 
		
		for (int j = 0; j < list.size(); j++) {
			
			ModelErrorChildImage model = list.get(j);
			JSONArray json = new JSONArray();
			
			json.add(model.getId());
			json.add( model.getOrderID().substring(11,19));
			json.add(model.getOrderID().substring(0,3));
			json.add(model.getCategoryName());
			json.add(model.getMissType());
			json.add(model.getVerfityItemName());
			json.add(model.getOrderID());
			json.add(model.getImageID());
			//json.add(model.getThumbnail());
	/*		json.add( model.getPngImage()  ); */
			json.add(model.getFinalResult() );
			json.add(model.getFinalEntryCommentID());
			json.add(model.getCorrectEntryResult());
			
			json.add(model.getCorrectCommentID());			
			json.add(model.getaResult());
			json.add(model.getaEntryCommentID());
			json.add(model.getaOpID());
			
			json.add(model.getbResult());
			json.add(model.getbEntryCommentID());
			json.add(model.getbOpID());
			
			json.add(model.getcResult());
			json.add(model.getcEntryCommentID());
			json.add(model.getcOpID());
			
			json.add(model.getdResult());
			json.add(model.getdEntryCommentID());
			json.add(model.getdOpID());
			
			json.add(model.geteResult());
			json.add(model.geteOpID());
			
			mapTable.add(json);	 
		}

		return mapTable;
	}

	
	 
	 public String export() throws Exception {
		
		 try {
			 
			 
			String	excelfile = "ErrorChildImageQuery.xls";
			String	xmlfile = "ErrorChildImageQuery.xml";
			 
			//begin
			String file = ServletActionContext.getServletContext().getRealPath(
					"WEB-INF/excel/" + excelfile);

			List<ModelErrorChildImage> errorChildImage = getErrorChildImage();
			 

			Map<String, JSONArray> map = new HashMap<String, JSONArray>();
			JSONArray errorChildImages = getErrorChildImageTableB(errorChildImage);
	
		
			map.put("検証状況資料情報", errorChildImages ); 
		 

			ByteArrayOutputStream out = new ByteArrayOutputStream();
			this.setFileName("検証状況資料情報 " + this.dateFrom+"~"+this.dateTo );
			
			String infoFile = ServletActionContext.getServletContext()
					.getRealPath("WEB-INF/excel/" +xmlfile);
			List<ExportInfo> infoList = (new xmlSerializer<List<ExportInfo>>())
					.read(infoFile);

			ExportToExcel.export(file, map, infoList, out);

			setExcelStream(new ByteArrayInputStream(out.toByteArray()));
			out.close();

			return ActionSupport.SUCCESS;
		} catch (Exception exp) {
			log.error(exp);
			return ActionSupport.ERROR;
		} 
 }

}
